package xyz.chaobei.feature.stream;

import xyz.chaobei.feature.entity.Person;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 并行流测试
 *
 * @author <a href='mailto:maruichao52@gmail.com'>MRC</a>
 * @since 2021/2/5
 */
public class ParallelTest {

    public static void main(String[] args) {

        // 筛选偶数
        List<Integer> list = Arrays.asList(1, 2, 3, 3, 4, 5, 5, 6);
        System.out.println(list);

        long num = list.stream().filter(item -> item % 2 == 0).count();
        System.out.println("------------------1 filter");
        System.out.println(num);

        System.out.println("------------------2 map");

        List<Person> people = Arrays.asList(new Person("hello", 1), new Person("world", 2));
        // 将每一个元素的name 组装成一个新的集合。
        List<String> names = people.stream().map(item -> item.getName()).collect(Collectors.toList());
        System.out.println(names);

        // 多重map处理
        List<String> concat = people.stream().map(item -> item.getName()).map(name -> name.concat("-concat")).collect(Collectors.toList());
        System.out.println(concat);

        System.out.println("------------------3 sorted");
        List<String> sortedList = Arrays.asList("acc", "dee", "zdd", "wee", "abb", "ccd");

        // 默认排序，字典顺序，第一个字母相同，则比较第二个
        List<String> sorted = sortedList.stream().sorted().collect(Collectors.toList());
        System.out.println(sorted);

        // 自定义实现，只比较第一个字符
        List<String> sorted2 = sortedList.stream().sorted((str1, str2) -> str1.charAt(0) - str2.charAt(0)).collect(Collectors.toList());
        System.out.println(sorted2);

        System.out.println("------------------3 allMatch");

        // 所有的元素都断言通过，就返回true,否则false
        boolean startWithA = sortedList.stream().allMatch(str -> str.startsWith("a"));
        System.out.println(startWithA);

        // 只要有一个满足就返回true
        boolean hasA = sortedList.stream().anyMatch(str -> str.startsWith("a"));
        System.out.println(hasA);
    }

}
